/**
 * @description:
 * 字符          数值
 * I             1
 * V             5
 * X             10
 * L             50
 * C             100
 * D             500
 * M             1000
 * I可以放在V(5) 和X(10) 的左边，来表示 4 和 9。
 * X可以放在L(50) 和C(100) 的左边，来表示 40 和90。
 * C可以放在D(500) 和M(1000) 的左边，来表示400 和900。
 *
 * @author: 啸
 * @email: zhang_6379@sina.com
 * @date: 2021/11/11 9:11
 */
public class leecode_question05 {
    public static void main(String[] args) {
        int i = romanToInt01("IX");
        int j = romanToInt02("II");
        System.out.println(j);
    }

    public static int romanToInt01(String str) {
        str = str.replace("IV", "a");
        str = str.replace("IX", "b");
        str = str.replace("XL", "c");
        str = str.replace("XC", "d");
        str = str.replace("CD", "e");
        str = str.replace("CM", "f");

        System.out.println(str);
        int result = 0;

        for (int i = 0; i < str.length(); i++) {
            result += match(str.charAt(i));
        }
        return result;
    }

    public static int romanToInt02(String str) {
        int result = 0;
        int flag = 1;
        for (int i = str.length() - 1; i >= 0; i--) {
            int a = match(str.charAt(i));
            if (a >= flag) {
                result += a;
            } else {
                result -= a;
            }
            flag = a;
        }
        return result;
    }

    public static int match(char cha) {
        switch (cha) {
            case 'I':
                return 1;
            case 'V':
                return 5;
            case 'X':
                return 10;
            case 'L':
                return 50;
            case 'C':
                return 100;
            case 'D':
                return 500;
            case 'M':
                return 1000;
            case 'a':
                return 4;
            case 'b':
                return 9;
            case 'c':
                return 40;
            case 'd':
                return 90;
            case 'e':
                return 400;
            case 'f':
                return 900;
        }
        return 0;
    }
}
